package javaApi.createFile;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class HadoopCreateFile {
    public static void main(String[] args) throws IOException {
        // 当前main函数的第一个输入参数，如果只执行类，没有参数，直接抛出参数错误异常
        // 含义是：要创建的相对路径的base路径
        // hdfs://niit-master:9000/user/niit/ 这是参数的传入值
        if (args.length != 1) {
            System.err.println("请输入一个hdfs://niit-master:9000格式的值");
            System.exit(2);
        }
        String uri = args[0];


        // 从core-site-default.xml中读取所有的Hadoop配置信息
        // 并从core-site.xml中覆盖相同的内容
        Configuration conf = new Configuration();

        //URI.create(uri):创建了一个URI的对象，用来指向特定的资源地址
        // get():基于配置信息，获取uri指定的那个资源
        // fs：可以操作uri指定的资源的对象---文件系统对象
        FileSystem fs = FileSystem.get(URI.create(uri), conf);

        // 路径的对象，Hadoop对其进行了自己的封装和实现，可以是：
        // 1.客户端的文件系统（Linux或者Windows）
        // 2.也可以是Hadoop的文件系统
        //   2.1路径类型（/user/niit/init.txt）
        //   2.2协议类型(hdfs://niit-master:9000/user/niit/init.txt)
        Path dfs = new Path("TestDir");

        // 利用文件系统对象根据path对象指定的路径创建一个文件夹
        // 创建了一个：hdfs://niit-master:9000/user/niit/TestDir 的文件夹
        fs.mkdirs(dfs);

    }
}
